# -*- coding: UTF-8 -*-
# cython: language_level=3
import time

from config import Area, Area_icp, Divisions
from db.mongodb import MongoDB
from db.mysqldb import MysqlDB
from utils.own_tools import del_html_tag, get_current_date, get_host, is_file_url, is_keyword_in_text

pass_urls = ['.58.com', '.baidu.com', '.taobao.com', '.tmall.com', '.alibaba.com', '.qq.com', '.1688.com', '.12580.tv',
             '.ailyun.com', '.alimama.com', '.360kan.com', '.weibo.com', '.meituan.com']


def fenlei_title(title):
    status = 100
    # 4	黑彩
    # 5	涉黄
    # 6	企业宣传网站
    # 7	教学类/学校
    # 8	政府网站
    # 9 解析工具
    # 10 知名网站
    title = str(title)
    if is_keyword_in_text(title,
                          ['成人高考', '自考', '自学考试', '教育', '培训', '学校官网', '大学官网', '大学新闻网', '试卷',
                           '教学教研', '挂号', '医院', 'java'],
                          to_lower=True):
        status = 7


    elif ('体育' in title or '娱乐' in title) and is_keyword_in_text(title,
                                                                     ['博', '中国', '官方', '平台', 'app', '登录入口',
                                                                      '下载地址', '官网', 'im', 'jdb', 'k1', 'm88',
                                                                      'ng', '万豪', '三亿', '天明', '完美', '明升',
                                                                      '星空', '火狐', '银河', '顶盛']):
        status = 4

    elif is_keyword_in_text(
            title,
            ['娱乐平台', '太阳城', '娱乐城', '娱乐场', '黄金城', '盛世娱乐', '果博', '开户电话', '开户在线客服', '抽水',
             'ag', 'pg', '乐虎', '乐鱼', '开元', '开云', '云开', '亚搏', '德州', '新葡萄', '澳门威斯尼斯', 'WNS888',
             '威尼斯人', '葡京', '新普京', '凯旋门', '美高梅', '米高梅', '吉祥坊', '金沙', '皇冠', '英皇', '百利',
             '北京赛车',
             '足彩', '福彩', '体彩', '博彩', '搏彩', '彩票', '竞彩', '竞猜', '赌博', '赌场', '赌钱', '快3',
             '赚钱', '稳赚', '赛车计划‘，’财神', '开奖', '大奖', '真金', '真钱',
             '下注', '投注', '押庄', '押注', '庄闲', '真人',
             '棋牌', '快三', '斗地主', '斗牛', '六合', '一分彩', '时时彩', '杏彩', '牌九', '百家乐', '牛牛', '捕鱼',
             '打鱼', '老虎机', '飞艇', '麻将', '金花',
             '365be', 'beat356', 'bet', 'boyu', 'b体育', 'hg0088', 'hth', '97622', 'kaiyun', 'kok', 'leyu',
             'ninegamesports', 'pk10', 'w88', 'bandao', 'mgm', '8833', '8883', '9778',
             '中欧', '九游', '九鼎', '九龙', '杏鑫', '亚新', '半岛', '华体会', '博鱼', '必威', '悦高', '欧宝',
             '沙巴',
             ], to_lower=True):
        status = 4

    elif is_keyword_in_text(title,
                            ['企业宣传', '系统集成', '设备', '宣传片拍摄', '公司', '集团', '工程', '厂家', '方案解决',
                             '产品', '云服务', '制造商', '中控', '控制器', '运营', 'seo', 'saas', '网络科技', '批发',
                             '零售', '智能卡', '人脸识别', '一体化方案',
                             '营销推广', '视频编辑', '经营部', '一件代发',
                             '出售买卖交易平台', '账号估', '海外云办公', '无纸化会议', '考勤软件', '编码器', '视频会议',
                             '收银系统', '压缩', '租赁', '海康威视',
                             '解决方案', '灯光', '照明', '家具', '销售'], to_lower=True):
        status = 6

    elif is_keyword_in_text(title,

                            ['1024', '4480yy', '51吃瓜', '685bt', '69xx', '77777', '884a', '91mv',
                             '91吃瓜', '91社区', '99av', '99pao', '99r', '99re', '99色', '9e', 'av',
                             'c8051', 'caoporn', 'gay', 'hdxxxx', 'hezyo', 'porn', 'freesex',
                             'video', 'videosex', 'ww4791', 'yy6029', 'yy6080',
                             '一区二区', '一本道', '丁香', '三级', '三级片', '下面', '不卡', '不良',
                             '丑事', '东京热', '丝瓜视频', '丝袜美腿', '丰满', '丽人', '久久', '久色', '久草', '久道',
                             '九色', '乱交', '乱人', '乱伦', '乱妇', '乱淫', '乱色国', '五月天', '亚洲区', '亚洲国产',
                             '人人爱', '人人爽', '人伦', '人体', '人兽', '人妇', '人妖', '人妻', '人婷', '人守', '人爱',
                             '人爽', '人片', '伊人', '伊影', '伦乱', '伦理', '伸进', '作爱', '侵犯', '俺', '借种',
                             '做受', '做性', '做爱', '偷人', '偷偷', '偷怕', '偷拍', '偷窥', '催眠', '公主',
                             '兽交', '兽兽', '兽舍', '内射', '凌辱', '凹凸', '出轨', '制服', '刺激', '加勒比', '十八禁',
                             '午夜', '变态', '口交', '另类', '吃奶', '同居', '同性恋', '后入', '吞精', '吸乳', '呦',
                             '咪咪', '咪噜', '啪', '啪啪', '喝尿', '喷出', '喷水', '喷潮', '嗷嗷', '嘿咕', '嘿咻', '噜',
                             '四虎', '多人运动', '夜夜', '夜爱', '夜草', '大乳', '大交', '大菠萝', '大蕉', '夫妻',
                             '失禁', '女厕', '奶子', '奶水', '奶罩', '奷', '好大', '好爽', '好看', '好色', '妇人', '姧',
                             '姪', '姬', '娇女', '娇妻', '婬', '婷', '婷婷', '孕交', '孕妇', '射人妻', '射精', '小姐',
                             '小穴', '小视频', '少妇', '尤物', '就操', '尹人', '屁股', '屄', '岛国', '工口', '巨乳',
                             '强乱', '强奷', '强迫', '往里', '忘忧草', '快播', '快猫', '怡红', '性交', '性受', '性息',
                             '性感', '性爱', '性爽', '性猛', '性生活', '性色', '性高潮', '情人', '情侣', '情色', '懂得',
                             '成人片', '成人网', '我爱大', '抽插', '抽搐', '按摩', '换脸', '探花', '插入', '插进',
                             '援交', '撸', '操人', '操大', '操大逼', '操烂', '操逼', '无修', '无套', '无毛', '无码',
                             '无碼', '无遮挡', '日夜', '日批', '春药', '暗网', '最污', '最美', '有码', '村妇', '杳蕉',
                             '极品', '桃色', '桃花', '欧美成人', '欲望', '毛片', '水蜜桃', '污污', '波多野', '波波',
                             '泬', '流出', '浪荡', '淫荡', '深夜', '深深', '清纯', '潮吹', '潮喷', '激情', '热舞',
                             '熟女', '熟妇', '爆乳', '爆操', '爆料', '爱色', '爽爽', '牲交片', '特黄', '狂射', '狠狠',
                             '猛交', '猛出', '猛进', '玩弄', '琪琪', '用力', '男同', '白嫩', '白浆', '看片', '真干',
                             '福利', '私处', '私密', '私拍', '秒射', '穴', '粉嫩', '粗大', '精子', '精液', '糟蹋',
                             '素人', '红杏', '红领巾', '纯肉', '线报', '结衣', '绿帽', '缴情', '美女', '美日韩', '美腿',
                             '羞耻', '老熟妇', '肉体', '胡搞', '脔', '臀荡', '自偷', '自啪', '自慰', '自拍', '舔',
                             '色一情', '色一欲', '色区', '色卡', '色吧', '色图', '色情', '色戒', '色欲', '色淫', '色爱',
                             '色爽', '色网', '色色', '艳妇', '花季', '荡妇', '萝莉', '裸交', '裸体', '裸女', '裸男',
                             '诱惑', '调教', '超碰', '蹂躏', '轮奸', '逼', '重口', '野战', '野狼', '金瓶梅', '阴茎',
                             '阴道', '露脸', '青久草', '青娱乐', '青春', '青柠', '青苹果', '青草', '青青', '韩一区',
                             '韩二区', '韩欧美', '风韵犹存', '饥渴', '香蕉', '高潮', '鲁一鲁', '鲁丝', '鲁鲁', '鸡巴',
                             '麻豆', '黄片', '黄瑟', '黄瓜', '黄瓜视频', '黄线', '黄网', '黄色录像', '黄色片',
                             '黄色电影', '黄频', '黑料'],
                            to_lower=True):
        status = 5
    elif is_keyword_in_text(title,
                            ['磁力搜索', '搜索神器', '导航', '黄页', '本地生活', '电影票', '订票', '抢票', '挂号',
                             '开源', '招聘信息',
                             '短视频去水印', '短视频解析', ],
                            to_lower=False):
        status = 9
    return status


def fenlei(title, icp='', province_name=''):
    status = fenlei_title(title)
    if status == 100:
        if (Area_icp in icp or (not icp and Area in province_name)
                or is_keyword_in_text(title,
                                      Divisions, to_lower=False)):
            status = 1000

            if is_keyword_in_text(title, ['综艺', '日漫', 'dytt', '动漫', '音乐', '微电影', '舞蹈', '港剧',
                                          '观看', '新闻', '播放', '动画', '热舞', '电影', '电视剧', '韩剧',
                                          '视频', '纪录片', '体育直播', '美剧', '摇滚', '首播', '娱乐', '热播',
                                          '电影天堂', '影院'], to_lower=True):
                status = 0
    return status


def get_all_url(host, html):
    db = MongoDB()
    for url_path in set(html.xpath('//a/@href')):
        flag_pass = False
        url_path = url_path.strip()

        if url_path.startswith('http'):
            if url_path.startswith('javascript'):
                continue
            url_path = url_path.partition('?')[0]

            if is_file_url(url_path, ['jpg', 'jpeg', 'gif', 'png', 'ico',
                                      'js', 'css', 'webp', 'xml', 'svg',
                                      'tiff', 'ttf', 'woff', 'woff2',
                                      'mp3', 'mp4', 'flv', 'm3u8', 'mov', 'wmv', 'avi', 'mpg', 'mkv', 'mpeg',
                                      'exe', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'apk'
                                      ]):
                continue

            for pass_url in pass_urls:
                if pass_url in url_path:
                    flag_pass = True
                    break
            if flag_pass:
                continue

            try:
                if host not in url_path.split('/')[2]:
                    # 外链存数据库
                    _host = get_host(url_path)
                    db.add('todo_urls', {'home_page': _host['home_page'], 'host': _host['host'], 'status': 0})
                    # print(f'---外链入库:{url_path}---')
            except:
                pass


def clear_db():
    db = MongoDB()
    for i in db.find('WEB_urls', {"status": 1}):
        db.update('WEB_urls', {'host': i['host']}, {'status': 0})


def add_icp(host, home_page, status, title='', ip='', icp='', video_license='', province_name='', city_name='',
            visit_status=0, *args, **kwargs):
    data = {'host': host, 'status': status, 'title': title, 'icp': icp, 'license': video_license,
            'PROVINCE_NAME': province_name, 'CITY_NAME': city_name, 'IP': ip,
            'record_time': get_current_date(), 'home_page': home_page}
    if visit_status == 0:
        data['last_visit'] = time.strftime('%y%m%d')
    MongoDB().add('WEB_urls', data)


def wuzheng_run(table, host):
    MongoDB().update(table, {'host': host}, {'status': 1})


def wuzheng_update(table, host, status, site_Confidence, page_num):
    MongoDB().update(table, {'host': host},
                     {'status': status, 'site_Confidence': site_Confidence, 'page_num': page_num})


def find_todo_url():
    return MongoDB().find('WEB_urls', {"status": 0})


def check_contain_english(check_str):
    if not check_str:
        return False
    return all(ord(c) < 128 for c in check_str)


def check_violate_keyword(title='', contnet=''):
    final_result_list = []
    final_kl = []
    only_title = False
    only_content = False
    both = False
    any_one = False

    violate_sql = 'select second_id,MUST_KEYWORD,OR_KEYWORD,MUST_NOT_KEYWORD,DIRECTOR,ACTOR,MATCH_TYPE from tab_knowledge_keyword_info where enable =1'
    violate_keyword_list = MysqlDB().find(violate_sql)

    def check(i, text):  # 判断关键词命中
        m = i[1]
        o = i[2]
        n = i[3]
        d = i[4]
        a = i[5]
        result_list = []
        kl = []
        if m and not check_contain_english(m):  # 判断must是否存在且为英文

            mks = m.split(' ')  # must list

            if a:
                mks.append(a)
            if d:
                mks.append(d)

            if all(t in text for t in mks):  # 判断must是不是命中
                nl = []
                if n:
                    nks = n.split(',')  # 先判断是否命中非关键词 命中跳出
                    for nw in nks:
                        if nw in text:
                            nl.append(nw)
                if nl:
                    return False, False
                if o:  # 判断or存在是否命中 命中添加
                    oks = o.split(',')  # or list
                    for ow in oks:  # 判断or是不是命中
                        if ow in text:
                            kl.append(m)
                            kl.append(ow)
                            result_list.append(str(i[0]))
                if not o:  # 如果没有or 直接添加
                    kl.append(m)
                    result_list.append(str(i[0]))
        if m and check_contain_english(m):  # 判断must是否存在且为非中文
            mks = []
            mks.append(m)
            if a:
                mks.append(a)
            if d:
                mks.append(d)
            if all(t in text for t in mks):  # 判断must是不是命中
                nl = []
                if n:
                    nks = n.split(',')  # 先判断是否命中非关键词 命中跳出
                    for nw in nks:
                        if nw in text:
                            nl.append(nw)

                if nl:
                    return False, False
                if o:  # 判断or存在是否命中 命中添加
                    oks = o.split(',')  # or list
                    for ow in oks:  # 判断or是不是命中
                        if ow in text:
                            kl.append(m)
                            kl.append(ow)
                            result_list.append(str(i[0]))
                if not o:  # 如果没有or 直接添加
                    kl.append(m)
                    result_list.append(str(i[0]))
        if not m and o:
            nl = []
            if n:
                nks = n.split(',')  # 先判断是否命中非关键词 命中跳出
                for nw in nks:
                    nl.append(nw)
            if nl:
                return False, False
            if o:  # 判断or存在是否命中 命中添加
                oks = o.split(',')  # or list
                for ow in oks:  # 判断or是不是命中
                    if ow in text:
                        kl.append(ow)
                        result_list.append(str(i[0]))
        return result_list, kl

    for i in violate_keyword_list:

        t = i[6]
        if not title:
            title = ' '
        if not contnet:
            contnet = ' '
        if t in (1, 2, 3):  # 判断是否是1至命中标题 2 至命中内容 3 标题或者内容
            if t == 1:
                # if t == 2:
                text = title
                result_list, kl = check(i, text)
                if result_list:
                    only_title = True
            elif t == 2:
                text = contnet
                result_list, kl = check(i, text)
                if result_list:
                    only_content = True
            else:
                text = title + del_html_tag(contnet)
                # print(text,i)
                result_list, kl = check(i, text)
                if result_list:
                    any_one = True
            if result_list:
                final_result_list = final_result_list + result_list
                final_kl = final_kl + kl
        # print(m)
        # print(text)
        if t == 4:  # 判断同时命中
            title_r, title_k = check(i, title)
            contnet_r, contnet_k = check(i, contnet)
            if title_r:  # 如果标题有命中判断文本是否命中
                if title_r == contnet_r:
                    final_result_list = final_result_list + title_r
                    final_kl = final_kl + title_k
                    both = True
    final_result_list = list(set(final_result_list))
    # print(result_list)
    # print(kl)
    if final_result_list:
        keywords = [str(k) for k in final_kl]
        info_type = 0
        if any_one:
            info_type = info_type + 3
        else:
            if only_title:
                info_type = info_type + 2
            if only_content:
                info_type = info_type + 1
        if both:
            info_type = info_type + 4

        return info_type, 'k' + 'k,k'.join(final_result_list) + 'k', ','.join(keywords)
    else:
        return 0, False, False


if __name__ == '__main__':
    print(fenlei('成都做人流多少钱〖优惠套餐〗成都打胎费用_锦江区无痛人流价格'))
